import router from './router'
import store from './store'
import NProgress from 'nprogress' // Progress 进度条
import 'nprogress/nprogress.css' // Progress 进度条样式
import { message } from 'util/message/message'
import { getToken, getBaseInfo } from 'util/auth'
import { recursionRouter } from '@/views/login/loginModel.js'

const whiteList = ['/login'] // no redirect whitelist

/* 在跳转之前执行 */
router.beforeEach((to, from, next) => {
  // 设置浏览器
  if (getBaseInfo('baseSetting')) {
    window.document.title = JSON.parse(getBaseInfo('baseSetting')).name
  }
  // 加载滚动条
  NProgress.start()
  if (getToken()) {
    // 获取待办事项数据
    store.dispatch('GetBadgeValue')
    // 判断是否有权限路由
    if (!store.getters.authRouters) {
      store.dispatch('GetRouters').then(res => { // 拉取路由菜单
        // 后台请求路由配置
        let userRouter = this.$store.state.user.authRouters
        // router.js配置路由
        let allRouter = this.$router.options.routes
        // 递归过滤后的路由
        let realRoutes = recursionRouter(userRouter, allRouter)
        // 更新过滤后的路由
        this.$store.commit('SET_AUTH_ROUTERS', realRoutes)
        // 判断是否有菜单
        if (store.getters.authRouters.length === 0) {
          message.error('没有菜单了，请联系管理员')
        }
        next()
        NProgress.done()
      }).catch(() => {
        // 退出并清空缓存数据
        store.dispatch('FedLogOut').then(() => {
          message.error('验证失败，请重新登录')
          next({
            path: '/'
          })
        })
      })
    } else {
      next()
      NProgress.done()
    }
  } else {
    if (whiteList.indexOf(to.path) !== -1) {
      next()
    } else {
      message.error('验证失败，请重新登录')
      next('/login')
      NProgress.done()
    }
  }
})

/* 在跳转之后执行 */
router.afterEach(() => {
  NProgress.done() // 结束Progress
})
